package com.bsoft.AQS;

/**
 * @program: demo
 * @description: 同步方法
 * @author: hdh
 * @create: 2022:03:31 10:42
 */
/*
    每个锁对象拥有一个锁计数器和一个指向持有该锁的线程的指针
    当执行monitorenter时 如果目标对象的计数器为0 那么说明它没有 被其他线程所持有 ，java虚拟机会将该锁对象的持有线程设置为
    当前线程，并且将其计数器加1

在目标锁对象的计数器不为0的情况下 如果锁对象的持有线程 那么java 虚拟机可以将其计数器加1 否则需要等待，直至持有线程释放该锁

当monotorexit时 java 虚拟机则需将锁对象的计数器为零代表锁已被释放




 */



public class ReenterLock1demo {

    public static void main(String[] args) {
        ReenterLock1demo demo = new ReenterLock1demo();
        demo.m1();
    }

    public synchronized void m1() {
        System.out.println("=======外");
        m2();
    }

    private synchronized void m2() {
        System.out.println("=====中");
        m3();
    }

    private synchronized void m3() {
        System.out.println("====内");
    }
}
